package org.rency.common.redis.service;

import java.util.Collection;

public interface RedisListService<K, V> {

	/**
	 * 把一个或多个元素插入表头。如果是多个value时，按照从左到右的次序插。返回插入元素的个数
	 * </br>Created on 2016年4月25日
	 * @param key
	 * @param value
	 * @return 插入元素个数
	 */
	public long leftPush(K key, V value);
	
	public long leftPushAll(K key, Collection<V> values);
	
	public V leftPop(K key);
		
	/**
	 * 将一个或多个值插入到队列的队尾。多值时，从左到右依次添加。返回列表中元素个数
	 * </br>Created on 2016年4月25日
	 * @param key
	 * @param value
	 * @return 列表中元素个数
	 */
	public long rightPush(K key, V value);
	
	public long rightPushAll(K key, Collection<V> values);
	
	public V rightPop(K key);
	
	/**
	 * 队/栈列长
	 * </br>Created on 2016年4月26日
	 * @param key
	 * @return
	 */
	public long size(K key);
	
	/**
	 * 根据索引获取目标
	 * </br>Created on 2016年4月26日
	 * @param key
	 * @param index
	 * @return
	 */
	public V get(K key, long index);
	
	public V rightPopAndLeftPush(K from, K to);
	
	public long remove(K key, long index, V value);
	
	public long remove(K key, long startIndex, long endIndex);
	
	public long remove(K key);
	
	public void set(K key, long index, V value);
	
	public void trim(K key, long startIndex, long endIndex);
	
}